package com.unitd.modules.sys.entity;

import com.unitd.comm.entity.SysEntity;
import org.hibernate.validator.constraints.Length;

import javax.persistence.Column;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.List;

/**
 * @desc 菜单信息表
 * @filename SysMenu.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0 
 * @date 2017-04-26
 */ 
@Table(name = "sys_menu")
public class SysMenu extends SysEntity {

	/** 上级ID */
	@Column(name = "parent_id")
	private String parentId;
	/** 菜单名称 */
	private String name;
	/** 菜单类型 -1:目录;0:菜单; 1:功能 */
	private String type;
	/** 地址 */
	private String url;
	/** 权限编码或者权限串(多个用逗号分隔，如：user:list,user:create) */
	private String perms;
	/** 描述 */
	private String description;
	/** 图标 */
	private String icon;
	/** 状态 0、正常 1、禁用 */
	private String state;
	/** 排序 */
	private Long sort;

	/********* 与数据存储无关,但展示或其他关联时需要用的属性 *********/
	/** 父菜单名称 */
	@Transient
	private String parentName;
	@Transient
	/** 父级菜单 */
	private SysMenu parent;
	/** 做数据展示的层级菜单列表 */
	@Transient
	private List<SysMenu> sonList;

	/**
	 * @desc 构造方法 SysMenu
	 */
	public SysMenu(String id, String parentId, String name, String type, String url, String perms, String description, String icon, String state, Long sort, String createBy, java.util.Date createDate, String updateBy, java.util.Date updateDate, String remarks, String delFlag) {
		this.id = id;
		this.parentId = parentId;
		this.name = name;
		this.type = type;
		this.url = url;
		this.perms = perms;
		this.description = description;
		this.icon = icon;
		this.state = state;
		this.sort = sort;
		this.createBy = createBy;
		this.createDate = createDate;
		this.updateBy = updateBy;
		this.updateDate = updateDate;
		this.remarks = remarks;
		this.delFlag = delFlag;
	}

	/**
	 * @desc 构造方法 SysMenu
	 */
	public SysMenu(String type) {
		this.type = type;
	}

	/**
	 * @desc 构造方法 SysMenu
	 */
	public SysMenu() {
		super();
	}

	/**
	 * @desc 获取上级ID
	 * @return parent_id - 上级ID
	 */
	public String getParentId() {
		return parentId;
	}

	/**
	 * @desc 设置上级ID
	 * @param parentId 上级ID
	 */
	public void setParentId(String parentId) {
		this.parentId = parentId;
	}

	/**
	 * @desc 获取菜单名称
	 * @return name - 菜单名称
	 */
	@Length(min=1, max=50)
	public String getName() {
		return name;
	}

	/**
	 * @desc 设置菜单名称
	 * @param name 菜单名称
	 */
	public void setName(String name) {
		this.name = name == null ? null : name.trim();
	}

	/**
	 * @desc 获取菜单类型 -1:目录;0:菜单; 1:功能
	 * @return type - 菜单类型 -1:目录;0:菜单; 1:功能
	 */
	public String getType() {
		return type;
	}

	/**
	 * @desc 设置菜单类型 -1:目录;0:菜单; 1:功能
	 * @param type 菜单类型 -1:目录;0:菜单; 1:功能
	 */
	public void setType(String type) {
		this.type = type;
	}

	/**
	 * @desc 获取地址
	 * @return url - 地址
	 */
	public String getUrl() {
		return url;
	}

	/**
	 * @desc 设置地址
	 * @param url 地址
	 */
	public void setUrl(String url) {
		this.url = url == null ? null : url.trim();
	}

	/**
	 * @desc 获取权限编码或者权限串(多个用逗号分隔，如：user:list,user:create)
	 * @return perms - 权限编码或者权限串(多个用逗号分隔，如：user:list,user:create)
	 */
	public String getPerms() {
		return perms;
	}

	/**
	 * @desc 设置权限编码或者权限串(多个用逗号分隔，如：user:list,user:create)
	 * @param perms 权限编码或者权限串(多个用逗号分隔，如：user:list,user:create)
	 */
	public void setPerms(String perms) {
		this.perms = perms == null ? null : perms.trim();
	}

	/**
	 * @desc 获取描述
	 * @return description - 描述
	 */
	@Length(min=1, max=200)
	public String getDescription() {
		return description;
	}

	/**
	 * @desc 设置描述
	 * @param description 描述
	 */
	public void setDescription(String description) {
		this.description = description == null ? null : description.trim();
	}

	/**
	 * @desc 获取图标
	 * @return icon - 图标
	 */
	public String getIcon() {
		return icon;
	}

	/**
	 * @desc 设置图标
	 * @param icon 图标
	 */
	public void setIcon(String icon) {
		this.icon = icon == null ? null : icon.trim();
	}

	/**
	 * @desc 获取排序
	 * @return sort - 排序
	 */
	public Long getSort() {
		return sort;
	}

	/**
	 * @desc 设置排序
	 * @param sort 排序
	 */
	public void setSort(Long sort) {
		this.sort = sort;
	}

	/**
	 * @desc 获取状态(0、正常 1、禁用)
	 * @return state - 状态(0、正常 1、禁用)
	 */
	public String getState() {
		return state;
	}

	/**
	 * @desc 设置状态(0、正常 1、禁用)
	 * @return state - 状态(0、正常 1、禁用)
	 */
	public void setState(String state) {
		this.state = state;
	}

	public String getParentName() {
		return parentName;
	}

	public void setParentName(String parentName) {
		this.parentName = parentName;
	}

	public SysMenu getParent() {
		return parent;
	}

	public void setParent(SysMenu parent) {
		this.parent = parent;
	}

	public List<SysMenu> getSonList() {
		return sonList;
	}

	public void setSonList(List<SysMenu> sonList) {
		this.sonList = sonList;
	}
}